/* 
泛型类
*/
 /* 
  1. 声明泛型类型: 在类名的右侧  <T>   // T K V
  2. 使用泛型: 类体中
  3. 指定泛型的具体类型: 创建类的实例时, 类名的右侧 <具体类型>
  */

(() => {
  class GenericData <T> {
    initValue: T;
    add: (x: T, y: T) => T
  }

  const gNumber = new GenericData<number>()
  gNumber.initValue = 4
  gNumber.add = function (a, b) {
    return a + b
  }
  console.log(gNumber.add(gNumber.initValue, 5))

  const gString = new GenericData<string>()
  gString.initValue = 'abc'
  gString.add = function (a, b) {
    return a + b
  }
  console.log(gString.add(gString.initValue, 'cba'))
  
})()